/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.femass.repository.infra;

import java.util.List;
import com.femass.model.Autor;
import org.hibernate.Session;
import com.femass.repository.AutoreRepository;
import com.femass.util.FacesUtil;
import javax.faces.application.FacesMessage;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author daureo
 */
public class AutoresRepositoryHibernate implements AutoreRepository{
 
    @Override
    public List<Autor> todos() {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return session.createCriteria(Autor.class)
                .list();
        
    }

    @Override
    public Autor porCodigo(Integer codigo) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Autor) session.get(Autor.class, codigo);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    }

    @Override
    public void salvar(Autor autor) {
       Session session = (Session) FacesUtil.getRequestAttribute("session");
       try{
            session.merge(autor);                       
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Autor Salvo!");
       } catch(Exception e){
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_WARN, "Erro ao salvar Autor!");
       }
       
    }

    @Override
    public void remover(Autor autor) {
       
      Session session = (Session) FacesUtil.getRequestAttribute("session");
      
        try {        
            session.delete(autor);
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Autor excluído com sucesso!");
        } catch (HibernateException e) {
            FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Autor não excluído!");
        } 
    }

    @Override
    public Autor comDadosIguais(Autor autor) {
        Session session = (Session) FacesUtil.getRequestAttribute("session");
        return (Autor) session.createCriteria(Autor.class)
                .add(Restrictions.eq("nome", autor.getNome()))
                .uniqueResult();
    }

   
    
}
